package com.example.demo.config;


import com.example.demo.component.OnlineUserManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.socket.WebSocketSession;

import java.util.UUID;

@Configuration
public class RedisConfig {

    @Autowired
    private static Logger log = LoggerFactory.getLogger(RedisConfig.class);

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private ObjectMapper objectMapper;

//    public String serialize(WebSocketSession session) {
//        String jsonWebSocketSession = null; //转为json字符串
//        try {
//            jsonWebSocketSession = objectMapper.writeValueAsString(session);
//        } catch (JsonProcessingException e) {
//            log.warn("WebSocketSession对象转换为json字符串失败");
//            return null;
//        }
//        return jsonWebSocketSession;
//    }

//    //反序列化,将json字符串转化为 WebSocketSession 对象
//    public WebSocketSession Deserialize(String jsonWebSocketSession)  {
//        WebSocketSession webSocketSession = null;
//        try {
//            webSocketSession = objectMapper.readValue(jsonWebSocketSession, WebSocketSession.class);
//        } catch (JsonProcessingException e) {
//            log.warn("json字符串转化为WebSocketSession对象失败");
//            return null;
//        }
//        return webSocketSession;
//    }


    //将 userId 和 jsonWebSocketSession 以key-value形式存储到redis中
    public Boolean setStringKeyValue(Integer userId,WebSocketSession session)
    {
        if(userId == 0 || session == null)
        {
            log.warn("userId或jsonWebSocketSession不正确");
            return false;
        }
        String sessionId =  session.getId();
        stringRedisTemplate.opsForValue().set(userId.toString(),sessionId);
        return true;
    }

    //将 jsonWebSocketSession 通过userId 作为key取出来
    public String getStringKeyValue(Integer userId)
    {
        String jsonWebSocketSession = stringRedisTemplate.opsForValue().get(userId.toString());
        return jsonWebSocketSession;

    }

    public Boolean deleteStringKetValue(Integer userId)
    {
        // 若键存在则删除并返回 true，否则返回 false
        return stringRedisTemplate.delete(userId.toString());
    }

    // 生成并绑定UUID
//    public UUID SessionWithUUID(WebSocketSession session)
//    {
//        String sessionId = session.getId();
//        UUID uuid = UUID.randomUUID();  // 生成标准UUID
//        return uuid;
//    }
//
}
